class Solution {
    // struct my
    // {
    //     bool operator()(const pair<int, string>& p1, const pair<int, string>& p2)
    //     {
    //         return p1.first < p2.first;
    //     }
    // };

public:
    vector<string> sortPeople(vector<string>& names, vector<int>& heights) {
        // 创建下标数组，按照特定方式排序
        int n = names.size();
        vector<int> index(n);
        for(int i = 0; i < n; i++)
            index[i] = i;
        sort(index.begin(), index.end(), [&](int i, int j){ return heights[i] > heights[j]; });

        vector<string> ret(n);
        for(int i = 0; i < n; i++)
        {
            ret[i] = names[index[i]];
        }
        return ret;


        // 建大堆
        // priority_queue<pair<int, string>, vector<pair<int, string>>, my> heap;
        // int n = names.size();
        // for(int i = 0; i < n; i++)
        //     heap.push(pair<int, string>(heights[i], names[i]));
            
        // vector<string> ret; 
        // while(!heap.empty())
        // {
        //     ret.push_back(heap.top().second);
        //     heap.pop();
        // }
        // return ret;
    }
};